<?php
require_once __DIR__ . '/../common/function.php';
checkLogin();

$action = $_REQUEST['action'] ?? '';
global $pdo;

// 辅助函数：设置最新版本时，自动取消其他版本的最新标识
function setLatestVersion($pdo, $currentId, $isLatest) {
    if ($isLatest == 1) {
        // 先将所有版本设为非最新
        $pdo->exec("UPDATE version SET is_latest = 0");
        // 再将当前版本设为最新
        $stmt = $pdo->prepare("UPDATE version SET is_latest = 1 WHERE id = ?");
        $stmt->execute([$currentId]);
    }
}

switch ($action) {
    // 获取版本列表
    case 'list':
        try {
            $stmt = $pdo->query("SELECT id, version_num, content, release_time, is_latest FROM version ORDER BY release_time DESC");
            $versions = $stmt->fetchAll(PDO::FETCH_ASSOC);
            success($versions, '获取成功');
        } catch (PDOException $e) {
            error('获取失败：' . $e->getMessage());
        }
        break;

    // 新增版本
    case 'add':
        $versionNum = trim($_POST['version_num'] ?? '');
        $content = trim($_POST['content'] ?? '');
        $isLatest = intval($_POST['is_latest'] ?? 0);

        if (empty($versionNum) || empty($content)) {
            error('版本号和更新内容不能为空');
        }

        try {
            // 检查版本号是否已存在
            $checkStmt = $pdo->prepare("SELECT id FROM version WHERE version_num = ?");
            $checkStmt->execute([$versionNum]);
            if ($checkStmt->fetch()) {
                error('版本号已存在');
            }

            // 插入新版本
            $stmt = $pdo->prepare("INSERT INTO version (version_num, content, is_latest) VALUES (?, ?, ?)");
            $stmt->execute([$versionNum, $content, $isLatest]);
            $newId = $pdo->lastInsertId();

            // 若设为最新，更新其他版本
            setLatestVersion($pdo, $newId, $isLatest);

            success([], '新增成功');
        } catch (PDOException $e) {
            error('新增失败：' . $e->getMessage());
        }
        break;

    // 编辑版本
    case 'edit':
        $id = intval($_POST['id'] ?? 0);
        $versionNum = trim($_POST['version_num'] ?? '');
        $content = trim($_POST['content'] ?? '');
        $isLatest = intval($_POST['is_latest'] ?? 0);

        if ($id <= 0 || empty($versionNum) || empty($content)) {
            error('参数错误');
        }

        try {
            // 检查版本是否存在
            $checkStmt = $pdo->prepare("SELECT id FROM version WHERE id = ?");
            $checkStmt->execute([$id]);
            if (!$checkStmt->fetch()) {
                error('版本不存在');
            }

            // 检查版本号是否与其他版本冲突
            $checkStmt = $pdo->prepare("SELECT id FROM version WHERE version_num = ? AND id != ?");
            $checkStmt->execute([$versionNum, $id]);
            if ($checkStmt->fetch()) {
                error('版本号已存在');
            }

            // 更新版本信息
            $stmt = $pdo->prepare("UPDATE version SET version_num = ?, content = ?, is_latest = ? WHERE id = ?");
            $stmt->execute([$versionNum, $content, $isLatest, $id]);

            // 若设为最新，更新其他版本
            setLatestVersion($pdo, $id, $isLatest);

            success([], '更新成功');
        } catch (PDOException $e) {
            error('更新失败：' . $e->getMessage());
        }
        break;

    // 删除版本
    case 'delete':
        $id = intval($_POST['id'] ?? 0);
        if ($id <= 0) {
            error('无效的版本ID');
        }

        try {
            $stmt = $pdo->prepare("DELETE FROM version WHERE id = ?");
            $stmt->execute([$id]);
            success([], '删除成功');
        } catch (PDOException $e) {
            error('删除失败：' . $e->getMessage());
        }
        break;

    default:
        error('无效操作');
}